home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <dos.h>
- #include <mem.h>
-
- typedef struct {
- char Name[9];
- char Ext[4];
- char Attribute;
- unsigned int Date;
- unsigned int Time;
- unsigned long Size;
- int Tag;
- } FileStruc;
-
- FileStruc *XScanDir( char *Mask, int Type );
- char *FileName( FileStruc *f );
-
- extern int ScdirDone;
-
- #define DTASIZE 43
-
- int ScanTree( char *path, char *filespec, int (*FN)(FileStruc *f, char *p) )
- {
- char mask[80], s[80];
- FileStruc *fs;
- char far *TempDta;
- char Dta[DTASIZE];
-
- sprintf( mask, "%s%s", path, filespec );
- ScdirDone = 1;
- while ( ( fs = XScanDir( mask, 0xff ) ) != NULL ) {
- if ( -1 == FN( fs, path ) ) return( -1 );
- }
- sprintf( mask, "%s*.*", path );
- while ( ( fs = XScanDir( mask, FA_DIREC ) ) != NULL ) {
- if ( fs->Attribute & FA_DIREC ) {
- TempDta = getdta();
- movedata( FP_SEG(TempDta), FP_OFF(TempDta), _DS, (unsigned) Dta, DTASIZE );
- sprintf( s, "%s%s\\", path, FileName( fs ) );
- if ( -1 == ScanTree( s, filespec, FN ) ) return( -1 );
- ScdirDone = 0;
- setdta( TempDta );
- movedata( _DS, (unsigned) Dta, FP_SEG(TempDta), FP_OFF(TempDta), DTASIZE );
- }
- }
- return( 1 );
- }
-